Large software projects are frequently divided into separate components to be completed by independent development teams. For example, in Java Enterprise Edition (J2EE) projects, applications are typically divided into a presentation or user interface component, a business logic component and a data component, each completed by an independent development team. Separating the development of an application in this manner reduces the complexity of development by isolating each team from the effects of changes in other parts of the project implemented by other teams.
However, such a division of development effort may still be subject to unnecessary complexity in very large projects. Upon completion of the J2EE components, the presentation and business components are generally combined into a single archive (WAR) file. Although the two components could be packaged into multiple WAR files, separate packaging is not preferable because each WAR file has its own configuration data and/or runtime resources. Thus, WAR files will not be able to share resources, such as a context root (configuration data) or a session (runtime resource), with other WAR files.
Consequently, a need exists to independently develop the separate components of a project while integrating the components into a single logical component at runtime.